getTriangle <- function(topx, topy, leftx, lefty, rightx, righty, howmuchpoint=10000){
newLeft <- numeric()
newRight <- numeric()
if(lefty - righty > 0){
newLeft = c(leftx, lefty)
newRight = c(rightx, righty)
} else {
newLeft = c(rightx, righty)
newRight = c(leftx, lefty)
}
x <- runif(howmuchpoint, leftx, rightx)
y <- runif(howmuchpoint, newRight[2], topy)
df <- data.frame(x = x, y= y)
a <- (topy - lefty) / (topx - leftx)
b <- topy - a*topx
df$isInside1 <- ifelse(df$x*a + b < df$y, 1, 0)
a <- (topy - righty) / (topx - rightx)
b <- topy - a*topx
df$isInside2 <- ifelse(df$x*a + b < df$y, 1, 0)
a <- (newLeft[2] - newRight[2]) / (newLeft[1] - newRight[1])
b <- newLeft[2] - a*newLeft[1]
df$isInside3 <- ifelse(df$x*a + b > df$y, 1, 0)
df <- df[df$isInside1 == 0 & df$isInside2 == 0 & df$isInside3 == 0,]
df
}
getTrank <- function(leftdownX, leftdownY, toprightX, toprightY, howmuchpoint=10000){
x <- runif(howmuchpoint, leftdownX, toprightX)
y <- runif(howmuchpoint, leftdownY, toprightY)
df <- data.frame(x,y)
df
}
multiplyPoints <- function(tr, partition){
selectedPoints <- tr %>% sample_n(size = partition*nrow(tr), replace=FALSE) %>% data.frame()
selectedPoints <- do.call("rbind", replicate(1000, selectedPoints, simplify = FALSE))
tr <- rbind(selectedPoints, tr)
tr
}
getEarsAndRibbons <- function(leftdownX, leftdownY, toprightX, toprightY, howmuchpoint=10000){
middleX <- (leftdownX + toprightX) / 2
middleY <- (leftdownY + toprightY) /2
marginX <- 0.1 * (toprightX - leftdownX)
marginY <- 0.1 * (toprightY - leftdownY)
#ribbons
ribbonVertical <- getTrank(middleX - marginX, leftdownY, middleX + marginX, toprightY) %>% select(x, y) %>% data.frame()
ribbonHorizontal <- getTrank(leftdownX, middleY - marginY, toprightX, middleY + marginY) %>% select(x, y) %>% data.frame()
#left ear
topx = (middleX + leftdownX) / 2
topy = (toprightY - leftdownY) * 0.25 + toprightY;
leftx = leftdownX
lefty = (toprightY - leftdownY) * 0.125 + toprightY;
rightx = middleX
righty = toprightY
leftRibbonEar <- getTriangle(topx, topy, leftx, lefty, rightx, righty) %>% select(x, y) %>% data.frame()
#right ear
topx = (middleX + toprightX) / 2
topy = (toprightY - leftdownY) * 0.25 + toprightY;
leftx = middleX
lefty = toprightY
rightx = toprightX
righty = (toprightY - leftdownY) * 0.125 + toprightY;
rightRibbonEar <- getTriangle(topx, topy, leftx, lefty, rightx, righty) %>% select(x, y) %>% data.frame()
rbind(leftRibbonEar, rightRibbonEar, ribbonVertical, ribbonHorizontal)
}
drawXMasTree <- function(){
tr1 <- getTriangle(10, 19, 8, 17, 12, 17, 500) %>% select(x, y) %>% data.frame()
tr2 <- getTriangle(10, 17, 6, 13, 14, 13, 1500) %>% select(x, y) %>% data.frame()
tr3 <- getTriangle(10, 13, 4, 8, 16, 8, 3000) %>% select(x, y) %>% data.frame()
tr4 <- getTriangle(10, 8, 2, 2, 18, 2, 3000) %>% select(x, y) %>% data.frame()
trank <- getTrank(8, 0, 12, 2, 1500) %>% select(x, y) %>% data.frame()
xmasTree <- rbind(tr1, tr2, tr3, tr4, trank) %>% select(x, y) %>% data.frame()
presentBox1 <- getTrank(14, 0, 17, 5) %>% select(x, y) %>% data.frame()
earsAndRibbons1 <- getEarsAndRibbons(14, 0, 17, 5) %>% select(x, y) %>% data.frame()
presentBox2 <- getTrank(18, 2, 21, 4) %>% select(x, y) %>% data.frame()
earsAndRibbons2 <- getEarsAndRibbons(18, 2, 21, 4) %>% select(x, y) %>% data.frame()
presentBox3 <- getTrank(16, 0, 22, 2) %>% select(x, y) %>% data.frame()
earsAndRibbons3 <- getEarsAndRibbons(16, 0, 22, 2) %>% select(x, y) %>% data.frame()
presentBox4 <- getTrank(3, 0, 7, 4) %>% select(x, y) %>% data.frame()
earsAndRibbons4 <- getEarsAndRibbons(3, 0, 7, 4) %>% select(x, y) %>% data.frame()
presentBox5 <- getTrank(2, 0, 5, 2) %>% select(x, y) %>% data.frame()
earsAndRibbons5 <- getEarsAndRibbons(2, 0, 5, 2) %>% select(x, y) %>% data.frame()
figure(xlab = "") %>% ly_hexbin(xmasTree$x, xmasTree$y, palette="Greens8") %>%
ly_hexbin(trank$x, trank$y, palette = "BrBG3") %>%
ly_hexbin(presentBox1$x, presentBox1$y, palette = "Blues4") %>%
ly_hexbin(earsAndRibbons1$x, earsAndRibbons1$y, palette = "Oranges8") %>%
ly_hexbin(presentBox2$x, presentBox2$y, palette = "RdPu4") %>%
ly_hexbin(earsAndRibbons2$x, earsAndRibbons2$y, palette = "YlOrRd6") %>%
ly_hexbin(presentBox3$x, presentBox3$y, palette = "GnBu3") %>%
ly_hexbin(earsAndRibbons3$x, earsAndRibbons3$y, palette = "Greys4") %>%
ly_hexbin(presentBox4$x, presentBox4$y, palette = "Purples3") %>%
ly_hexbin(earsAndRibbons4$x, earsAndRibbons4$y, palette = "Blues4") %>%
ly_hexbin(presentBox5$x, presentBox5$y, palette = "RdPu5") %>%
ly_hexbin(earsAndRibbons5$x, earsAndRibbons5$y, palette = "YlOrRd3")
}
drawXMasTree()